/**
 * HuffmanTree.java
 * Descripción: Representa a un árbol binario de Huffman, el cual tiene por nodos a HuffmanAssociations,
 *              para indicar uno o varios carácteres y su frecuencia.
 * Inspirado en la clase BinaryTree del libro JavaStructures de Duane Bailey, 2007 (C)
 * y en el documento colocado en BlackBoard de árboles de Huffman.
 * @author Oscar Castañeda 11086
 * @since 11/09/2012
 * @version 1.0
 */

public class HuffmanTree implements BinaryTree<HuffmanAssociation>{

    private BinaryTree<HuffmanAssociation> left;
    private BinaryTree<HuffmanAssociation> right;
    private HuffmanAssociation value;
    
    /**
     * @pre No hay precondiciones.
     * @post Se construye un HuffmanTree que tiene como nodo la HuffmanAssociation
     *       dada como parámetro. Este HuffmanTree es una hoja, por lo que no tiene hijos.
     */
    public HuffmanTree(HuffmanAssociation value){
        this.value = value;
        left = null;
        right = null;
    }
    
    /**
     * @pre No hay precondiciones.
     * @post Se construye un HuffmanTree que tiene como nodo la HuffmanAssociation
     *       dada como parámetro. Este HuffmanTree también tiene por hijo derecho e izquierdo
     *       a otros HuffmanTree, dados como parámetros.
     */
    public HuffmanTree(HuffmanAssociation value, HuffmanTree left, HuffmanTree right){
        this.value = value;
        this.left = left;
        this.right = right;
    }
    
    @Override
    public BinaryTree<HuffmanAssociation> getLeft() {
        return left;
    }

    @Override
    public BinaryTree<HuffmanAssociation> getRight() {
        return right;
    }

    @Override
    public HuffmanAssociation getValue() {
        return value;
    }

    @Override
    public void setLeft(BinaryTree<HuffmanAssociation> newLeft) {
        left = newLeft;
    }

    @Override
    public void setRight(BinaryTree<HuffmanAssociation> newRight) {
        right = newRight;
    }
    
}
